package com.osce.interfaces.face;

import com.baomidou.mybatisplus.extension.service.IService;
import com.csce.domain.entity.face.FaceList;
import com.csce.domain.entity.face.FaceUserListDTO;
import com.osce.common.utils.http.CompareFaceRecognitionAO;
import com.osce.common.utils.http.CompareFaceRes;
import com.osce.common.utils.http.ImageAO;
import com.csce.domain.entity.face.ao.SlabEnteringFaceAO;
import com.csce.domain.entity.face.ao.SlabEnteringFingerprintAO;
import com.osce.common.core.entity.AjaxResult;

import java.util.List;
import java.util.Map;

/**
 * 人脸数据Service接口
 *
 * @author zzx
 * @since 2023-11-21
 */
public interface IFaceListService extends IService<FaceList> {

    /**
     * 查询人脸数据
     *
     * @param id 人脸数据主键
     * @return 人脸数据
     */
    FaceList selectFaceListById(Long id);


    /**
     * 查询人脸数据列表
     *
     * @param faceList 人脸数据
     * @return 人脸数据集合
     */
    List<FaceList> selectFaceListList(FaceList faceList);

    List<FaceUserListDTO> selectFaceList(FaceUserListDTO dto);

    List<FaceList> selectFaceListAll();


    /**
     * 新增人脸数据
     *
     * @param faceList 人脸数据
     * @return 结果
     */
    int insertFaceList(FaceList faceList);

    int insertFaceListByFile(byte[] file, Long userId);

    int insertFaceListByBase64(String base64, Long userId);

    /**
     * 修改人脸数据
     *
     * @param faceList 人脸数据
     * @return 结果
     */
    int updateFaceList(FaceList faceList);

    int updateFaceListByFile(byte[] file, Long userId);

    int updateFaceListByBase64(String base64, Long userId);

    /**
     * 批量删除人脸数据
     *
     * @param ids 需要删除的人脸数据主键集合
     * @return 结果
     */
    int deleteFaceListByIds(Long[] ids);

    /**
     * 删除人脸数据信息
     *
     * @param id 人脸数据主键
     * @return 结果
     */
    int deleteFaceListById(Long id);

    /**
     * 人脸比较
     *
     * @param faceFeature 人脸特征值
     */
    AjaxResult faceCompare(String faceFeature);
    AjaxResult faceCompare(String faceFeature,List<Long> userIds);
    AjaxResult faceCompare(String faceFeature, Map<String,String> faceMap);

    /**
     * 人脸比较
     *
     * @param base64 图片base64加密字符串
     */
    AjaxResult faceCompareBase64(String base64);

    /**
     * 人脸比较
     *
     * @param fileBytes 图片字节数组
     */
    AjaxResult faceCompareFileBytes(byte[] fileBytes);

    /**
     * 平板新增人脸数据
     */
    int slabFaceAdd(SlabEnteringFaceAO ao);

    /**
     * 平板新增指纹数据
     */
    int slabFingerprintAdd(SlabEnteringFingerprintAO ao);

    int editImage(ImageAO ao);

    int addImage(String image, Integer userId);

    CompareFaceRes callFaceCompareFacesRecognitionService(CompareFaceRecognitionAO ao);
}
